Pre-trained মডেল ব্যবহার করে কাজ করা হলো একটি দ্রুত এবং কার্যকরী পদ্ধতি, বিশেষ করে যখন আমাদের কাছে পর্যাপ্ত ডেটা বা কম্পিউটেশনাল রিসোর্স নেই। PyTorch এবং অন্যান্য ডিপ লার্নিং ফ্রেমওয়ার্কে অনেক প্রি-ট্রেইনড মডেল পাওয়া যায়, যেমন ResNet, VGG, Inception, ইত্যাদি। এই মডেলগুলো সাধারণত বড় ডেটাসেট (যেমন ImageNet) দিয়ে ট্রেনিং করা হয়, এবং সেগুলো থেকে শেখা ফিচারগুলো বিভিন্ন কাজে পুনঃব্যবহার করা যায়।
Pre-trained মডেল ব্যবহার করার ধাপ
নিচে PyTorch ব্যবহার করে প্রি-ট্রেইনড মডেল ব্যবহার করার ধাপগুলো বিস্তারিতভাবে ব্যাখ্যা করা হয়েছে।
ধাপ ১: প্রয়োজনীয় লাইব্রেরি ইম্পোর্ট করা
import torch
import torch.nn as nn
from torchvision import models, transforms
from PIL import Image
import requests
from io import BytesIO
ধাপ ২: প্রি-ট্রেইনড মডেল লোড করা
PyTorch-এর torchvision.models মডিউল থেকে সহজেই প্রি-ট্রেইনড মডেল লোড করা যায়।
# ResNet18 প্রি-ট্রেইনড মডেল লোড করা (ImageNet ডেটাসেটের উপর প্রি-ট্রেইনড)
model = models.resnet18(pretrained=True)
# মডেলকে ইভ্যালুয়েশন মোডে সেট করা
model.eval()
ধাপ ৩: ইনপুট ইমেজ প্রস্তুত করা
ইমেজকে মডেলের জন্য প্রস্তুত করতে হলে কিছু ট্রান্সফর্মেশন করতে হয়, যেমন রিসাইজ, টেনসর কনভার্সন, এবং নরমালাইজেশন।
# ইমেজ ট্রান্সফর্ম সেট করা
preprocess = transforms.Compose([
transforms.Resize(256),
transforms.CenterCrop(224),
transforms.ToTensor(),
transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),
])
# একটি উদাহরণ ইমেজ লোড করা
url = "https://example.com/path/to/your/image.jpg" # এখানে আপনার ইমেজের URL দিন
response = requests.get(url)
img = Image.open(BytesIO(response.content))
# ইমেজ প্রিপ্রসেস করা
img_t = preprocess(img)
batch_t = torch.unsqueeze(img_t, 0) # ব্যাচ সাইজ হিসেবে ১ সেট করা
ধাপ ৪: মডেলের মাধ্যমে প্রেডিকশন করা
# মডেলের মাধ্যমে ইমেজ প্রেডিক্ট করা
with torch.no_grad():
output = model(batch_t)
# আউটপুট লেবেল খুঁজে বের করা
_, predicted = torch.max(output, 1)
print(f'Predicted class: {predicted.item()}')
ধাপ ৫: আউটপুট ইন্টারপ্রেট করা
PyTorch মডেলের আউটপুট সাধারণত লজিট আকারে আসে, যা পরে ক্লাসে রূপান্তর করা হয়। আপনি ImageNet ডেটাসেটের লেবেল ম্যাপিং ডাউনলোড করে আউটপুট ক্লাসকে সহজেই ইন্টারপ্রেট করতে পারেন।
# লেবেল ম্যাপিং ডাউনলোড করা
LABELS_URL = "https://raw.githubusercontent.com/pytorch/hub/master/imagenet_classes.txt"
labels = requests.get(LABELS_URL).text.splitlines()
# প্রেডিক্টেড ক্লাস প্রিন্ট করা
print(f'Predicted label: {labels[predicted.item()]}')
Pre-trained মডেল ফাইন-টিউন করা
Pre-trained মডেল ব্যবহার করে ট্রেনিং করার সময়, আপনি সম্পূর্ণ মডেল বা শুধু শেষের কয়েকটি লেয়ার ফাইন-টিউন করতে পারেন। উদাহরণস্বরূপ, ResNet18 মডেলের ফুলি কানেক্টেড লেয়ার পরিবর্তন করে আমাদের নির্দিষ্ট কাজের জন্য ফাইন-টিউন করতে পারি।
# লাস্ট লেয়ার পরিবর্তন করে দুটি ক্লাসে আউটপুট সেট করা
num_ftrs = model.fc.in_features
model.fc = nn.Linear(num_ftrs, 2) # 2 টি ক্লাস উদাহরণস্বরূপ
# মডেলকে GPU তে স্থানান্তর করা (যদি GPU থাকে)
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = model.to(device)
# Loss function এবং optimizer সেট করা
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.001, momentum=0.9)
# মডেল ট্রেনিং লুপ (সংক্ষেপে)
for epoch in range(5):
model.train()
# ট্রেনিং ডেটালোডার ব্যবহার করে ব্যাচ লোড করা
for inputs, labels in train_loader:
inputs, labels = inputs.to(device), labels.to(device)
optimizer.zero_grad()
outputs = model(inputs)
loss = criterion(outputs, labels)
loss.backward()
optimizer.step()
প্রি-ট্রেইনড মডেল ব্যবহারের সুবিধা
- সময় এবং রিসোর্স সাশ্রয়ী: প্রি-ট্রেইনড মডেল ব্যবহার করলে নতুন মডেল শূন্য থেকে ট্রেনিং করার প্রয়োজন হয় না।
- উন্নত পারফরম্যান্স: প্রি-ট্রেইনড মডেলগুলো সাধারণত বড় ডেটাসেটে ট্রেনিং করা হয়, তাই এগুলো বিভিন্ন কাজে উন্নত ফলাফল দিতে সক্ষম।
- সহজ কাস্টমাইজেশন: প্রি-ট্রেইনড মডেলের নির্দিষ্ট লেয়ারগুলো সহজেই পরিবর্তন বা ফাইন-টিউন করে আমাদের নির্দিষ্ট কাজের জন্য উপযোগী করা যায়।
এভাবে, PyTorch ব্যবহার করে প্রি-ট্রেইনড মডেল খুব সহজে ব্যবহার করা যায় এবং ফাইন-টিউন করা যায়। এটি বিশেষ করে ছোট ডেটাসেট বা সীমিত রিসোর্সের ক্ষেত্রে অত্যন্ত কার্যকরী।
Read more